package perucuy.dao.sqlmap;

import java.util.HashMap;
import java.util.List;

import org.apache.log4j.Logger;

import perucuy.dao.TareaDAO;
import perucuy.transfers.TareaTO;
import static perucuy.utils.Funciones.getTipoFecha;
public class SqlMapTareaDAO extends SqlMapDAO implements TareaDAO {
    
    /**
     *
     */
    
    private static Logger log = Logger.getLogger(SqlMapTareaDAO.class);
    
    private static final TareaDAO dao = new SqlMapTareaDAO();
    
    private SqlMapTareaDAO() {
        super(SqlMapDAOFactory.getSqlMap());
        log.debug("dao tarea instanciado");
    }
    
    public void close() {
        log.debug("cerrando");
    }
    
    public static TareaDAO getInstance() {
        return dao;
    }
    
    public List listado() {
        return consultaEnLista("getListaTarea", null);
    }
    
    public void create(TareaTO tarea) {
        String id = "" + insert("insertTarea", tarea);
        tarea.setCodigo(Integer.parseInt(id));
        actualizarDetalle(tarea);
    }

    public void actualizar(TareaTO tarea){
        update("update-tarea", tarea);
        HashMap hm = new HashMap();
        hm.put("id", ""+tarea.getCodigo());
        delete("deleteTareaPozo", hm);
        actualizarDetalle(tarea);
    }
    
    private void actualizarDetalle(TareaTO tarea){
        String id =""+tarea.getCodigo();
        // Almacenando la ubicacion
        log.debug("insertando ubicacion de la tarea");
        String[] codigos=tarea.getCodigosPozo();
        if (codigos.length>0) {
            for (int i=0; i<codigos.length; i++){
                HashMap<String, String> hm = new HashMap<String, String>();
                hm.put("id_tarea", id);
                hm.put("id_poza", codigos[i]);
                insert("insertTareaPozo", hm);
            }
        }
        // Almacenando detalle de tarea
        switch(Integer.parseInt(tarea.getId_tipo())){
            case 1:
                log.debug("Almacenando datos de Alimentos");
                update("update-tarea_alimento", tarea);
                break;
            case 2:
                log.debug("Almacenando datos de Tratamiento");
                update("update-tarea_tratamiento", tarea);
                break;
        }
    }
    
    public TareaTO dameTarea(int id){
        HashMap<String, Integer> hm = new HashMap<String, Integer>();
        hm.put("id", id);
        TareaTO t = queryForObject("getTarea", hm);
        List lista = consultaEnLista("getTareaPozo", hm);
        log.debug("nro de pozas: "+lista.size());
        if (lista.size()>0){
            String codigos="";
            for (int x=0; x<lista.size(); x++){
                codigos+=(String)lista.get(x)+",";
            }
            log.debug("codigo de la tarea: "+codigos);
            t.setIds_pozo(codigos);
        }
        return t;
    }
    
    public int eliminarTarea(int id){
        HashMap hm = new HashMap();
        hm.put("id", id);
        return delete("deleteTarea", hm);
    }
    
    public List listadoResponsable() {
        return consultaEnLista("getListaResponsable", null);
    }
    
    public List listado(int campo, String valor) {
        HashMap hm = new HashMap();
        hm.put("campo", campo);
        if (campo==2)
            hm.put("valor", getTipoFecha(valor));
        else
            hm.put("valor", valor);
        return consultaEnLista("getListaTarea", hm);
    }
}
